<?php

/**

 * Classe model da tabela Conta VOIP

 * @filesource
 * @author			Marcos Rodrigo
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.models
 * @version			1.0

*/

class ContaVoip extends Zend_Db_Table_Abstract
{

	protected $_name = "tbl_contavoip";
	protected $_referenceMap = array(
		'NumeroVoip' => array(
			'columns' => 'contavoip_id',
			'refTableClass' => 'NumeroVoip',
			'refColumns' => 'id'
		)
	);
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract

	 */
	public function busca($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("c"=>"tbl_contavoip"));
		 
		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 

		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}

		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);

	}


	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract

	 */
	public function buscaCompleta($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("c"=>"tbl_contavoip"));
		
		$slct->joinLeft(array("co"=>"tbl_contrato"), 
									"co.contavoip_id = c.id", 
							  array("contrato_id"=>"co.id"));
		 
		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 

		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}

		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);

	}
	
	/**
	 * Retorna registros do banco de dados montando parametros especialmente para comparar um parametro
	 * com um ou varios parametros por meio da query IN ou NOT IN
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 *
	 * @version 1.0 - original
	 */ 
	public function buscaINouNotIN($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->distinct();
		
		$slct->from(array("c"=>"tbl_contavoip"));
		
		/*$slct->from($this, 
							array("contrato_id"=>"contrato_id",
								  "documento_id"=>"documento_id"));*/
		
		
		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
            if(!empty($valor)){
                $slct->where($coluna, $valor);
            }
		}
		
		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		//xd($slct);
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	
	/**
	 * apaga um registro da tabela
	 * @param int $codigo - codigo do registro para apagar
	 * @return void
	 */
	public function apaga($codigo)
	{
		$row = $this->find($codigo)->current();
		$row->bln_ativo = 0;
		$row->save();
		//$where = $this->getAdapter()->quoteInto('id = ?', $codigo);
		//$this->delete($where);
	}


	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotal($where=array())
	{
		$slct = $this->select();

		$slct->setIntegrityCheck(false);

		$slct->from(array("c"=>"tbl_contavoip"),array("COUNT(c.id) as total"));
		 
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}

		$rows = $this->fetchAll($slct);
		return $rows->current()->total;

	}
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalCompleta($where=array())
	{
		$slct = $this->select();

		$slct->setIntegrityCheck(false);

		$slct->from(array("c"=>"tbl_contavoip"),array("COUNT(c.id) as total"));
		
		$slct->joinLeft(array("co"=>"tbl_contrato"), 
									"co.contavoip_id = c.id", 
							  array("contrato_id"=>"co.id"));
		 
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}

		$rows = $this->fetchAll($slct);
		return $rows->current()->total;

	}
}

